/*
 * Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "HostEngineCommandLine.h"
#include <catch2/catch_all.hpp>

// This test calls ParseBindIp() directly because when ParseCommandLine() fails, TCLAP::ExitException terminates the
// test harness.
TEST_CASE("HostEngineCommandLine::ParseBindIp")
{
    struct
    {
        std::string_view input;
        std::string_view expectedValue;
    } const tests[] = {
        { "", "" },
        { "[", "[" },
        { "]", "]" },
        { "[]", "[]" },
        { "[a", "[a" },
        { "a]", "a]" },
        { "::", "::" },
        { "[ab", "[ab" },
        { "ba]", "ba]" },
        { "all", "" },
        { "ALL", "" },
        { "[abc]", "abc" },
        { "[::]", "::" },
        { "[::1]", "::1" },
        { "127.0.0.1", "127.0.0.1" },
        { "1234:abcd:5678:efab:90ab", "1234:abcd:5678:efab:90ab" },
        { "[1234:abcd:5678:efab:90ab]", "1234:abcd:5678:efab:90ab" },
        { "{invalid}", "{invalid}" },
    };

    HostEngineCommandLineInterface hecl {};

    for (auto const &test : tests)
    {
        DYNAMIC_SECTION("input=" << test.input << ", expected=" << test.expectedValue)
        {
            auto result = hecl.ParseBindIp(test.input.data());
            CHECK(result == test.expectedValue);
        }
    }
}
